package com.qtrue.thread;

/*
*   例子：创建三个窗口卖票，总票数为100张。（使用实现Runnable接口的方式实现）
*
*   存在线程安全问题，待解决。
*/
public class WindowTest02 {
    public static void main(String[] args) {
        // 创建实现类的对象
        Window2 window = new Window2();

        // 将实现类对象作为参数传递到Thread类的构造器中
        // 以下创建的三个线程实际上是共用一个window对象，区别于第一种创建线程的方式（因此ticket属性不会出现三个窗口卖同一张票三次的情况）
        Thread thread01 = new Thread(window);
        Thread thread02 = new Thread(window);
        Thread thread03 = new Thread(window);

        // 设置线程名称
        thread01.setName("窗口一");
        thread02.setName("窗口二");
        thread03.setName("窗口三");

        // 启动线程
        thread01.start();
        thread02.start();
        thread03.start();
    }
}

class Window2 implements Runnable {
    // 总票数
    private int ticket = 100;

    @Override
    public void run() {
        while (true) {
            if (ticket > 0){
                System.out.println(Thread.currentThread().getName() + "：卖票，票号为：" + ticket);
                ticket--;
            }else {
                break;
            }
        }
    }
}
